﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Schüleranmeldung;
using Schüleranmeldung.Database;
using System.Reflection;

namespace Schüleranmeldung
{
    public partial class FormAnmeldung : Form
    {
        ListView SchuelerList = null;        
        
        public SchuelerErzAdr SchuelerErzAdr { get; set; }
        //public Schueler Schueler { get; set; }
        public K_AllgAdresse K_AllgAdresse { get; set; }
        public Schueler_AllgAdr Schueler_AllgAdr { get; set; }
        public K_Schule K_Schule { get; set; }
        public AllgAdrAnsprechpartner AllgAdrAnsprechpartner { get; set; }
        public EigeneSchule_Schulformen EigeneSchule_Schulformen { get; set; }

        Schueler Schueler = null;

        public FormAnmeldung(ref ListView _SchuelerListe, ref Database.Schueler _Schueler)
        {
            InitializeComponent();
            SchuelerList = _SchuelerListe;
            Schueler = _Schueler;
            //Schueler = new Schueler();
            SchuelerErzAdr = new SchuelerErzAdr();
            K_AllgAdresse = new K_AllgAdresse();
            Schueler_AllgAdr = new Schueler_AllgAdr();
            K_Schule = new K_Schule();
            AllgAdrAnsprechpartner = new AllgAdrAnsprechpartner();
            EigeneSchule_Schulformen = new EigeneSchule_Schulformen();
        }

        private void FillComboBox(ComboBox target, object dataSource, String displayMember, String valueMember, object selectedValue = null)
        {
            target.DataSource = dataSource;
            target.DisplayMember = displayMember;
            target.ValueMember = valueMember;
            if (selectedValue != null)
            {
                target.SelectedValue = selectedValue;
            }
        }
         
        private void dateTimePickerEnde_ValueChanged(object sender, EventArgs e)
        {

        }

        private void FormAnmeldung_Load(object sender, EventArgs e)
        {
            //Religion            
            FillComboBox(cmbKonfession, DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Religion, "Bezeichnung", "ID");
            foreach (DatabaseNRW.K_Religion KR in DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Religion.Where(s => s.ID == Schueler.Religion_ID))
            {
                cmbKonfession.SelectedItem = KR;
            }

            //Staatsangehörigkeit
            FillComboBox(cmbStaatsangehoerigkeit, DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Staat, "Bezeichnung", "ID");
            foreach (DatabaseNRW.K_Staat KS in DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Staat.Where(s => s.Bezeichnung == Schueler.StaatAbk))
            {                
                cmbStaatsangehoerigkeit.SelectedItem = KS;
            }
            //Schulen in NRW
            FillComboBox(cmbSchule, DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Schule, "Name", "ID");
            foreach (DatabaseNRW.K_Schule Schule in DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Schule.Where(s => s.SchulNr == Schueler.LSSchulNr))
            {
                //cmbSchule.SelectedItem = Schule.Name;
                cmbSchule.SelectedItem = Schule;
                labSchuleOrt.Text = Schule.Ort;
                //Schulart.Text = Schule.SchulformBez.ToString();
            }
            GU_ID_BOX.Text = Schueler.GU_ID;
        }

        private void btnAnlegen_Click(object sender, EventArgs e)
        {
            SaveControlsSchueler(this);
            //Schueler.ID = 20000;//jhgjgjhgjhg
            Schueler.Religion_ID = cmbKonfession.SelectedIndex+1;

            foreach (K_Staat KS in AppBackend.Instance.SchildDB.K_Staat.Where(s => s.ID == cmbStaatsangehoerigkeit.SelectedIndex+1))
            {                
                Schueler.StaatAbk = KS.Bezeichnung;
            }

            foreach (DatabaseNRW.K_Schule Schule in DatabaseNRW.AppBackendNRW.Instance.SchildDBNRW.K_Schule.Where(s => s.ID == cmbSchule.SelectedIndex+1))
            {
                Schueler.LSSchulNr = Schule.SchulNr;
            }

            //Schueler.Geburtsdatum = dpt_geborenDatum.MaxDate;

            ListViewItem item = new ListViewItem(new string[] { Schueler.ID.ToString(), Schueler.Vorname + " " + Schueler.Name, Schueler.Strasse + " " + Schueler.Hausnr + " " + "Bildungsgang" + " " + Schueler.Aufnahmedatum.ToString() });
            item.Tag = Schueler;
            SchuelerList.Items.Add(item);
            
            try
            {
                //AppBackend.Instance.SchildDB.Schueler.AddObject(Schueler);
                AppBackend.Instance.SchildDB.SaveChanges();
                //db.Schueler.AddObject(Schueler);
                //db.SaveChanges();
            }
            catch (Exception ex2)
            {
                Console.Write("fehler Update{0}", ex2.InnerException);
            }
            Close();
        }

        private void btnAbrechen_Click(object sender, EventArgs e)
        {
            Close();
        }        

        public void SaveControlsSchueler(Control startControl)
        {            
            foreach (Control control in startControl.Controls)
            {
                SaveControlsSchueler(control);
            }

            if (startControl.Tag is string)
            {
                Type tb = Schueler.GetType();
                PropertyInfo bpi = tb.GetProperty(startControl.Tag.ToString());
                if (bpi != null)
                {   
                    if (bpi.PropertyType.Name == "Int32")
                        bpi.SetValue(Schueler, Convert.ToInt32(startControl.Text), null);
                    if (bpi.PropertyType.Name == "String")
                        bpi.SetValue(Schueler, startControl.Text.ToString(), null);                    
                }
            }
        }

        private void labSpaetaussiedler_Click(object sender, EventArgs e)
        {

        }

        private void cmbKonfession_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        

        
    }
}
